{% extends "base.html" %} {% block title %}{{ p.title }} · {{ app_name }}{% endblock %} {% block body %}
{{ p.summary }} {% if p.author %}— {{ p.author }}{% endif %} · {{ p.license }}{% if p.nsfw %} · 18+{% endif %} {% if p.removed_at %} · removed {{ p.removed_at|local('%Y-%m-%d') }}{% elif not p.enabled %} · switched off{% endif %} {% if m.playset.homepage %} · homepage ↗{% endif %}
{% if ev %}{{ ev.starts }} → {{ ev.ends }} · {{ e.days if e else '' }} days {% if e %}· {% if e.state == 'running' %}day {{ e.day }}{% elif e.state == 'upcoming' %}starts in {{ e.starts_in_days }} days{% else %}ended{% endif %}{% endif %} {% if e and e.joined %} · you're in{% endif %}
{% if e and e.state == 'running' and e.joined %}{{ e.line }}
{% endif %} {% if ev.voice != 'mix' %}While you're in it, its lines take the Handler's voice for every kind it wrote; the rest stay yours.
{% endif %} {% if ev.days %}{{ ev.days|length }} days carry scheduled training, assigned on the day, due at midnight.
{% endif %} {% if e and e.state != 'ended' and not e.joined and p.enabled and not p.removed_at %} {% elif e and e.joined and e.state != 'ended' %} {% endif %}| badge | what it takes | rule | |
|---|---|---|---|
| {% if art.get(rs) %} |
{{ b.title }}{% if b.xp %} +{{ b.xp }} xp{% endif %} | {{ b.blurb }} | {{ b.rule.kind }}{% for k, v in b.rule.items() if k != 'kind' %} {{ k }}={{ v }}{% endfor %} |
Installed {{ p.installed_at|local('%Y-%m-%d') }} from {{ p.source or 'a file' }} · {{ (p.size / 1024)|round|int }} KB · sha {{ p.sha }}